DatePrompt.lastYearPrompt   A
last analyzed

Complexity

Conditions 1

Size

Total Lines 7
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 7
dl 0
loc 7
rs 10
c 0
b 0
f 0
cc 1
1
import fatum from 'fatum';
2
import cottus from 'cottus';
3
import { CommandDecorator } from './utils';
4
5
class Prompt {
6
    validator: any;
7
8
    validate(value:string):any {
9
        const extracted = this.extract(value);
10
11
        return this.validator.validate(extracted);
12
    }
13
    extract(value: string):any {
14
        return value;
15
    }
16
}
17
18
class RangePrompt extends Prompt {
19
    placeHolder = 'Please enter range';
20
    prompt = 'Enter min-max range for generation';
21
    defaultValue = '1-100';
22
23
    extract(value: string) {
24
        const [ min, max ] = value.split('-');
25
26
        return { min, max };
27
    }
28
}
29
30
class IntPrompt extends RangePrompt {
31
    validator = cottus.compile([
32
        'required', { 'attributes' : {
33
            'min' : [ 'required', 'integer' ],
34
            'max' : [ 'required', 'integer' ]
35
        } }
36
    ]);
37
}
38
39
class FloatPrompt extends RangePrompt {
40
    validator = cottus.compile([
41
        'required', { 'attributes' : {
42
            'min' : [ 'required', 'number' ],
43
            'max' : [ 'required', 'number' ]
44
        } }
45
    ]);
46
}
47
48
class DatePrompt extends RangePrompt {
49
    static lastYearPrompt() {
50
        const now = new Date();
51
        const before = new Date();
52
53
        before.setFullYear(before.getFullYear() - 1);
54
55
        return `${before.toISOString()};${now.toISOString()}`;
56
    }
57
    defaultValue = DatePrompt.lastYearPrompt();
58
    validator = cottus.compile([
59
        'required', { 'attributes' : {
60
            'min' : [ 'required', 'date' ],
61
            'max' : [ 'required', 'date' ]
62
        } }
63
    ]);
64
    extract(value: string) {
65
        const [ min, max ] = value.split(';');
66
67
        return { min, max };
68
    }
69
}
70
71
const commands = [
72
    { id: 'fatum.domain', generate: () => fatum.domain() },
73
    { id: 'fatum.email', generate: () => fatum.email() },
74
    { id: 'fatum.firstName', generate: () => fatum.firstName() },
75
    { id: 'fatum.fullName', generate: () => fatum.fullName() },
76
    { id: 'fatum.int', generate: (p:any) => fatum.int(p.min, p.max), prompt: new IntPrompt() },
77
    { id: 'fatum.lastName', generate: () => fatum.lastName() },
78
    { id: 'fatum.nickName', generate: () => fatum.nickName() },
79
    { id: 'fatum.password', generate: () => fatum.password() },
80
    { id: 'fatum.sentence', generate: () => fatum.sentence() },
81
    { id: 'fatum.text', generate: () => fatum.text() },
82
    { id: 'fatum.uniform', generate: (p:any) => fatum.uniform(p.min, p.max), prompt: new FloatPrompt() },
83
    { id: 'fatum.uuid', generate: () => fatum.uuid() },
84
    {
85
        id       : 'fatum.date',
86
        generate : (p:any) => {
87
            const date = fatum.date(p.min, p.max);
88
89
            return date.toISOString();
90
        },
91
        prompt : new DatePrompt()
92
    }
93
];
94
95
export default commands.map(c => ({
96
    id      : c.id,
97
    handler : CommandDecorator(
98
        c.generate,
99
        { prompt: c.prompt }
100
    )
101
}));
102